About Depths of Darkness
------------------------

This game was conceived in 1986. Back then, I was a high school student with his own Apple II+ computer, who, being inspired by Chase, Gauntlet and several other games, made a pastiche of them which I called Dungeon*.

Dungeon put the entire level's activity on a single hectic screen, just like Chase, and had electric walls the monsters could run into, also just like Chase. It was quite an entertaining game with lots of features and fast arcade action.

It wasn't long before I started thinking about a sequel. One thing I didn't like about the original was there was one big room for each level, and that all activity happened on screen. Meanwhile, in Berzerk, the player travelled off to different rooms, and in Gauntlet the level was too large to fit on one screen.

My theme for "Dungeon 2" would be more like those games, with a number of rooms per level, maybe even two or more rooms on one screen. Also I was going to stop using monsters and just fight killer robots like in Chase and Berzerk. Maybe even bring in better shooting.

My ideas overwhelmed me and, bereft of the coding skills needed to pull them off, I abandoned the game and worked on other things, but the desire to make a multiple-room level returned the moment I realized I could just make rooms in a maze format.

The game, which was called "Dungeon 2: Caves of Death", was very much like Depths of Darkness is now, except for the crudity of graphics and no variety in monsters, among other things.

I found myself really loving this game; the play balance turned out to be absolute perfection, with the player gaining about 1 experience level for each level he descended, and the equippable items found on a level coming just in time.

There was one more thing. Dungeon 2 was designed to last as long as you wanted. Dungeon 1 had a maximum of 5000 levels, but 2 was meant to go as long as poor Applesoft floating point variables could hold out-- maybe 10 million levels. Back in those days, games were more score-based, and I milked that as much as my high score tables could bear.

The demo program (for games used to have an "attract mode") and the game were seperate files because of the low RAM of the Apple II+. This system worked well, until I added an automap to the game, forgot to lock the file, and upon adding the map description to the demo, accidentally saved the demo with the wrong file name, right over the game's only copy.

I was devastated. That game was perfect! And now nobody could ever see it in action. I couldn't start over, because I knew it wouldn't be as good. So I did what I did before-- abandon the game and resolve to return to it.

Eventually I made Dungeons 3 and 4 which were closer to Gauntlet. My programs were getting more sophisticated, and because of low RAM it made it difficult to use the high resolution graphics routines I was used to.

In 1990 I returned to the Dungeon 2 concept with "Dungeon 6", but I chose to make the game low resolution so I could write it quickly, and then switch to hi-res once it was working. But no matter how hard I tried, I couldn't get the game small enough to make room in RAM for the hi-res screen. Also, the play balance was very imperfect.

In 1991 I made Dungeon 7, for the Apple IIgs. Using the new super hi-res mode should have looked great, but I never got around to switching from a lo-res simulation to fully sprited graphics. 

Despite the bad play balance and inferior graphics on both of these games, I played them a lot, which told me something about the viability of this concept that kept me remembering it.

In 1998 I got an old 486 PC and started coding again. The next year saw QBasic Dungeon**, which was based on the original Dungeon 2 concept. A much improved tile graphics, with more item types, new feautres and even sound effects, made this a vastly improved game.

The only drawback-- besides the obvious play imbalance and the sound effects slowing down the action, was that each level was enormous and took forever to complete. It also increased the difficulty, since one had to really search for the level's sword, shield and armor.

It was the best I could do then. I all but gave up coding until I had access to a decent BASIC compiler. Once I found out about FreeBASIC in 2007, I started coding like mad, just about every concept I'd come up with over the previous two decades.

By 2011, I had gotten bogged down in several projects that would take months/years to finish, and I needed a quick release. Dungeon 2's concept showed promise. I had already made good routines for graphics tiles, mouse/keyboard input, and other things, so it was easy to create the framework for the game. Graphics design was easy-- I ran a number of public domain tiles through Photoshop to spiff them up. I was on the verge of figuring out sound effects in FreeBASIC, so I put in a routine to allow for it once it was worked out.

Now all I had to do was figure out what the original code was, that perfect play balance I was always missing. I meditated on it for three days. Finally I thought to look for a piece of paper which I still had, detailing the old graphics. Surprisingly, the armor was a shield, which meant there was no seperate shield type! I had to make armor plus shield equal total defense, and managed to dope out how that was originally made to work.

Then I knew I had to have smaller levels at the start, so one could progress more. I hit upon the idea of each new level being larger than the last.

By this time, the game was called Depths of Despair, there was no amulet and the levels went down forever. I had 112 monster graphics, but no names for them. Potions worked like they did in Gauntlet-- killing all the monsters on the screen; while scrolls were not yet implemented and I had no idea what spells they were supposed to cast.

Importantly, I made the game playable as soon as possible. That way I could add modules and routines faster, while testing the existing code. An unplayable game could have any number of bugs, and if they pile up you don't know why the game doesn't execute when you DO try to make it playable.

The early combat code was awful, but simplifying it seemed to help. Also I realized the game needed more variety than Dungeon 2, so I came up with the switches and their sometimes nefarious effects. This made me look back at the game as a whole and think about what needed to be changed.

I changed the name to Depths of Disaster, because Despair was the name of a dungeon in Ultima IV. I added high scores and other modules and gave the monsters names. Now it was taking shape.

In fact, nearly a week had passed, and the game felt like it was nearly completed! I struggled for as much free time as possible so I could finish. The Amulet of Retlam had been placed, though I thought it should be on the 1000th level. (Even I thought this was ridiculous, so I changed it later.)

I figured out what was wrong with the combat code, and changed it. Next, I added lots of secrets (I won't divulge them here, sorry about that). Some more switches were added. Several times I redesigned the player display to work with 1024x768, which is much too small for my tastes but I have to allow for that as some kind of minimum. The game display ended up being rather squarish, but it's still okay.

Then it occured to me "Depths of Disaster" would prompt critics to reply the whole game was a disaster, so I renamed it Depths of Darkness because of the room lighting routine I had just put in. Sadly I had to remake the title screen and logo. Also there's the question of why not just call it "Dark Depths"? (Because it reminds me of Dark Chambers, a primitive Gauntletlike by Atari).

The second week was mostly coding the complicated animations for the Story and Tutorial sections, and bug removal. At its end I had a working game, so I released it as 1.0, with an ingame promise of a future 1.1 which would have sound effects.

I was surprised at the pleasant reaction to the game, but not at the cries of the game being too difficult. I had planned this to be the hardest game imaginable-- where it was tough to score even 1000 points. The ghosts of old arcade games cry out for vengeance against those who play the easier modern junk with cutscenes!

I find it strange that DoD was called a Roguelike, as I was in the middle of making a different game which is my Roguelike. Also, although there are random levels and encounters and random switch effects, DoD is not turn-based! If you take long enough the monsters move. The original Dungeon 2 wasn't turn-based either.

But there were complaints, too, which I gradually realized were valid. I deliberately left out game saves, since I wanted the whole game to be played in one session, like the arcade games of old required. However, I stupidly placed the Amulet of Retlam on the bottom of the 100th level, which was still too deep! People were complaining that it was taking them simply hours and hours just to descend 20 levels.

At this point, Lachie Dazdarian on the FreeBASIC forum suggested an option to save between levels. I realized I could have it delete itself when resumed-- and there only needed to be a short pause between levels, so I agreed. It required remaking and merging the new/load game routines, which was easy.

For 1.1, I wanted to add some new features and fix some bugs. Also, I wanted to take my time for once, though occasional (valid) gripes on the forum would spur me to redouble my activity.

I wanted to make it so NPCs sometimes attacked other NPCs instead of the player. This was a nod to Doom and Spyro the Dragon. I had some bugs where NPCs appeared in the corner wall instead of in a doorway.

More importantly, the sound routines were hell to work out. The only thing that seemed feasible to me was the PlayMIDI routine by MySoft. It was only after reinstalling FB on my computer that I could get that to work within my programs. But, I didn't want the sounds to slow down the game. Fortunately I discovered the Threadcreate function, allowing the game to execute while the sounds played seperately.

The function worked, but brought up an insane number of bugs. Sound effects overran one another, causing it to play the wrong notes, the wrong octaves, the wrong instruments, twice, and sometimes playing the last note at infinite length, causing extra threads to pile up.

After months of pondering this problem, I finally realized the only thing I could do was create a sound stack which a dedicated sound thread would play one at a time, even if some of them were late or even not played. I consider this the best that can be managed with PlayMIDI without altering it or adding inline ASM.

I still think 1.1 has bugs, but I've done everything I can to smooth them out. If there are enough new ones, or a really cool idea for a new feature, I'll make a 1.2; but I doubt it as I have many projects to get to.

I hope you enjoy Depths of Darkness.

Eric Draves
Destructosoft
20110911

----

*Dungeon was never commercially released. If it had been, TSR would have sued my pants off since they had a board game of the same name I didn't know about. However, I did make a bunch of disks and offered it at a garage sale for $10. It sold exactly one copy.

**QBasic Dungeon was never sold, but a copy of the game was given away to a friend on a compilation floppy which I humorously titled "Disc Inferno". He couldn't figure out how to get it running anyway.